package com.cddx.logistics.mapper;

import com.cddx.logistics.domain.dto.AnnualLedgerQueryDTO;
import com.cddx.logistics.domain.dto.LedgerQueryDTO;
import com.cddx.logistics.domain.dto.StockOperationQueryDTO;
import com.cddx.logistics.domain.pojo.StockOperation;
import com.cddx.logistics.domain.vo.*;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface StockOperationMapper {
    List<AnnualLedgerVO> queryAnnualLedger(AnnualLedgerQueryDTO queryDTO);
    List<StockOperationVO> queryPage(StockOperationQueryDTO queryDTO);
    int insert(StockOperation stockOperation);
    int update(StockOperation stockOperation);
    int delete(Long stockOperationId);
    StockOperationVO getById(Long stockOperationId);
    int countByStatus(Integer status);

    /**
     * 获取配变电项目统计
     */
    List<PowerTransformerStatsVO.TableData> getPowerTransformerProjects();

    /**
     * 统计已完成配变电项目数
     */
    int countCompletedPowerTransformerProjects();

    /**
     * 统计未完成配变电项目数
     */
    int countPendingPowerTransformerProjects();

    /**
     * 获取计划完成统计数据
     */
    PlanCompletionStatsVO getPlanCompletionStats();

    /**
     * 查询出入库记录并关联计划表获取物料信息
     */
    List<StockOperationVO> queryPageWithPlanInfo(StockOperationQueryDTO queryDTO);

    /**
     * 获取备品统计数据
     * @param queryDTO
     * @return
     */
    List<SparePartsStatsVO> getSparePartsStatsByType(StockOperationQueryDTO queryDTO);


    // 获取新品项目列表
    List<NewProductStatsVO.TableData> getNewProductProjects();

    // 统计已完成新品项目数
    int countCompletedNewProductProjects();

    // 统计未完成新品项目数
    int countPendingNewProductProjects();

    /**
     * 获取电缆统计信息
     */
    CableStatsVO getCableStatistics();

    /**
     * 获取线路统计信息
     * @param queryDTO
     * @return
     */
    List<LineStatsVO> getLineStats(StockOperationQueryDTO queryDTO);

    /**
     * 获取临措统计数据
     * @param queryDTO 查询条件
     */
    List<TemporaryMeasureStatsVO> getTemporaryMeasureStats(StockOperationQueryDTO queryDTO);


    /**
     * 统计所有项目数
     */
    int countAllProjects();

    /**
     * 统计已完成项目数
     */
    int countCompletedProjects();

    /**
     * 获取台账数据
     * @param queryDTO
     * @return
     */
    List<LedgerVO> queryPageToLedger(LedgerQueryDTO queryDTO);
}